{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 线性回归实例\n",
    "- 手写一元线性回归\n",
    "- 手写梯度下降算法\n",
    "- 和Scikit-learn中的线性回归比较"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-20T02:35:04.660863Z",
     "start_time": "2025-06-20T02:35:03.152406Z"
    }
   },
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from sklearn.linear_model import LinearRegression\n",
    "# 绘制三维图，此处用不上\n",
    "from mpl_toolkits.mplot3d import axes3d\n",
    "\n",
    "pd.set_option('display.notebook_repr_html', False)\n",
    "pd.set_option('display.max_columns', None)\n",
    "pd.set_option('display.max_rows', 150)\n",
    "pd.set_option('display.max_seq_items', None)\n",
    "\n",
    "%matplotlib inline\n",
    "\n",
    "import seaborn as sns\n",
    "sns.set_context('notebook')\n",
    "sns.set_style('white')"
   ],
   "outputs": [],
   "execution_count": 1
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-20T02:35:19.614323Z",
     "start_time": "2025-06-20T02:35:19.599243Z"
    }
   },
   "source": [
    "data = np.loadtxt('linear_regression_data1.txt', delimiter=',')\n",
    "#np.ones(data.shape[0])为截距项\n",
    "#np.r_是按行连接两个矩阵，就是把两矩阵上下相加，要求行数相等，类似于pandas中的concat()\n",
    "#np.c_是按列连接两个矩阵，就是把两矩阵左右相加，要求列数相等，类似于pandas中的merge()\n",
    "X = np.c_[np.ones(data.shape[0]), data[:,0]]\n",
    "Y = np.c_[data[:,1]]"
   ],
   "outputs": [],
   "execution_count": 2
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-20T02:35:29.173268Z",
     "start_time": "2025-06-20T02:35:29.052870Z"
    }
   },
   "source": [
    "# 散点图：s表示大小，c表示颜色，marker表示标记\n",
    "plt.scatter(X[:, 1], Y, s=30, c='b', marker='+', linewidths=1)\n",
    "# 横坐标的范围\n",
    "plt.xlim(4, 24)\n",
    "# 城市人口数量，单位：万\n",
    "plt.xlabel('Population of City in 10,000s')\n",
    "# 收入，单位：万美元\n",
    "plt.ylabel('Profit in $10,000s')"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Profit in $10,000s')"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAG1CAYAAAAFuNXgAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAQ+tJREFUeJzt3QnclPP+//FPeyhEWqxZSkWksmQpFckh1MlazqEiy+mgLOWUypqkkyO02IvjoBL/DtrITqTjKGVLotKCU2hT83+8v/O77nvuaeZe5p7luq55PR+Pu5lm5p77uma73vP5bhUikUjEAAAAQqJirjcAAAAgnQg3AAAgVAg3AAAgVAg3AAAgVAg3AAAgVAg3AAAgVAg3AAAgVAg3AAAgVCpbHmrVqpVt2bLF9tprr1xvCgAAKKU1a9ZY1apV7cMPPyz2dnkZbjZv3mzbtm3L9WYAAIAy+P333600Cyv4Itz8/PPPNmrUKHv99dftl19+sUMPPdT69+/vKixy6aWX2jvvvFPkd4455hibOHFiSn+vTp067nT27Nlp2HoAAJANHTp0KNXtfBFu+vXr50pNCjh77rmnCy29evWyqVOn2kEHHWRLliyxoUOH2imnnFLwO1WqVMnpNgMAAH/KebhZtmyZvf322/b0009by5Yt3WWDBw+2N99801566SXr0aOHrVu3zo488kj6yAAAAP+PlqpVq5aNHz/emjVrVnBZhQoV3M/69etd1UbnDzzwwJxuJwAACIach5tdd93V2rZt63o/e1599VVX0TnppJPs888/t5o1a9qtt95qbdq0sU6dOtno0aPdaCcAAADfhZt48+fPt4EDB1rHjh3t5JNPduFGo5uOOOIIe/jhh+3KK6+05557zgYNGpTrTQUAAD6U8z43sWbNmmXXX3+9tWjRwkaOHOkuU8Xmpptust122839v1GjRq4z8XXXXWc33nij1a5dO8dbDQAA/MQ3lZtJkyZZ3759rV27djZ27FirVq2au7xy5coFwcbTsGFDd7pq1aqcbCsAAPAvX4QbjZS67bbbrHv37m44eGz/m4svvtg1U8X673//66o3DRo0yMHWAgAAP8t5s9TSpUvtzjvvtFNPPdX69Olja9euLbiuevXqdtppp7nr1efmxBNPdMFmxIgRbh6cGjVq5HTbAQCA/+Q83Ghk1NatW23mzJnuJ1aXLl1s+PDhbii4JvZTyNFcN5dccoldfvnlOdtmAADgXxUipVmkIaTTN7P8AgAgX61caTZunFmfPmb161uojt++6HMDAACyH26GDYuehg3hBgAAhErO+9wAAIDsWLmysFIzf37RU1HzVFCaqIpDuAEAIE+MGxdtiop12WWF54cMMRs61AKPcAMAQJ7o08fsrLMKKzYKNhMmmLVoEb0sDFUbIdwAAJAn6idodlKw8cJNWNChGAAAhArhBgCAPFS/frSPTViaomLRLAUAQB6qXz8cnYcToXIDAABChXADAABChXADAABChXADAABChXADAABChXADAABChXADAABChXADAABChXADAABChXADAAiclSujs+vqFIhHuAEABI5CzbBhhBskRrgBAAChwsKZAIBAUJXGq9TMn1/01FsIMowrXKPsCDcAgEAYNy7aFBXrsssKzw8ZEt5VrlE2hBsAQCD06WN21lmFFRsFmwkTzFq0iF5G1QYewg0AIBASNTsp2HjhBvDQoRgAAIQK4QYAEDiq4KiPDU1RSIRmKQBA4CjU0HkYyVC5AQAAoUK4AQAgBSwB4V+EGwAAUsASEP5FuAEAAKFCh2IAAEqJJSCCgXADAEApsQREMBBuAAAoJZaACAbCDQAApcQSEMFAh2IAABAqhBsAAFLAEhD+RbMUAAApYAkI/6JyAwBAOTBTsf8QbgAAKAdmKvYfwg0AAAgV+twAAFBGzFTsb4QbAADKiJmK/Y1wAwBAGTFTsb8RbgAAKCNmKvY3OhQDAIBQIdwAAFAOzFTsPzRLAQBQDsxU7D9UbgAAQKj4Itz8/PPPdsstt1ibNm2sRYsWduGFF9qHH35YcP27775rXbt2tSOPPNI6depk06dPz+n2AgAA//JFuOnXr599/PHHNmrUKJs8ebI1adLEevXqZV9//bV99dVX1qdPHzvppJNsypQpdu6559qNN97oAg8AAIDv+twsW7bM3n77bXv66aetZcuW7rLBgwfbm2++aS+99JKtW7fODj30ULvuuuvcdQcffLAtWrTIHn74YWvdunWOtx4AAPhNzis3tWrVsvHjx1uzZs0KLqtQoYL7Wb9+vWueig8xxx13nH300UcWiURysMUAAMDPch5udt11V2vbtq1VrVq14LJXX33VVXTUFLVq1SqrV69ekd+pU6eObdy40X766accbDEAAPCz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06ak97Ft2za3v/HP/f33329B2u9BgwbtsA/a/zA/3zqf7L3+wgsvJL2fSy+9dIfbxz+eufbzzz/bLbfcYm3atLEWLVrYhRdeaB9++GHB9XquunbtakceeaR16tTJpk+fXuJ9PvXUU+4zUM/3RRddZIsWLTK/+bmE/Z48ebJ17tzZfa517NjRxo8f797D6ToGZp1WBUfZvf7665FmzZpFfvjhh8jq1asLfjZu3Jjw9j169Ij88Y9/jHz66aeRd955J9KuXbvIjTfeGAmSzZs3F9lX/cyYMSNy6KGHRp5//vmEv/PUU09FTjnllB1+T/fld5MmTYo0btzYPXeeH3/8MXLsscdGBg4cGPnyyy/dfut1kGz/5d13340cdthhkSeeeML9zvDhwyOHH364Ox+U/Z43b16kSZMmkYceeiiydOlS9/pv06ZNZMCAAUnvR/vXqFGjyGeffVbkuf/ll18iQdlv6datW2TUqFFF9mHdunWhfr5/+umnIvurz7mLLroocsYZZxT7/LVu3Try9NNPF/ld3ZefXHrppZEzzzzTvaa//vrryLBhwyJHHHFE5KuvvnLPkd7Per51/uGHH440bdrUfWYnM2XKFPf706ZNi3zxxReRG264IXLMMccU+xrx235PmzbNvWafeeaZyLJlyyLTp0+PtGjRInL//fen7RiYbYSbFI0fPz7SuXPnUt12/vz57kM+9sPtzTffdKFg1apVkaD69ddfXUgr7gA3ZMiQyBVXXBEJEj0nffr0iTRv3jzSqVOnIh/6Y8eOjZx44omRrVu3Flx27733Rjp27Jj0/nr27Bm55pprilx2/vnnRwYPHhwJyn73798/cskllxS5/dSpU90HYrKg6n1A+l1x+719+3Z3uUJ8aYXh+Y43ceJEF9B0IExm7dq17nNu4cKFEb/65ptv3DZ++OGHRZ5jfQEbPXq0e44UZmP169fPPafJ6L0/YsSIgv/rs6Ft27busyIo+33BBRdE/va3vxX5nTFjxrj9SMcxMBdolkrRkiVL7OCDDy7VbVX622uvvYrcXk1TFSpUcM02QTV27FjXtHbTTTel5XHyi4ULF1qVKlXsxRdfdKXp+OdSz13lypULLjvuuOPsm2++sbVr1+5wX9u3b7f58+db69ati1x+7LHH2rx58ywo+92zZ88dnueKFSva1q1b7Zdffgn0c1/cfn/7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vYtuH/tYbdiwIXLnnXe6uTL0WJ199tmRmTNnRoL2fP/73/+OnHPOOW7CM73fNSlf7Hs3bM937Os8fn6uWHqf6/r4CQFPP/30gveGJn3ctm1bxC+0Pclex3oMZO7cuW6yO+2D5v/RfE2x4l/nosn+NKmlXiOa7HDRokURP3momP3W5H7Jrot9fvV8eo9RScdAP6igf3IdsAAAANKFZikAABAqhBsAABAqhBsAABAqhBsAABAqhBsAABAqhBsAABAqhBsAmu8q15vgCzwOQDgQboAy0iymmqE59keLxml1XS0GqqUKckGL3Wlb4pc8KIlWa9daUZ77778/6QzUuaJZoE844QS3UKe2tzivvvqqmxX3+OOPdysVazZh/Y5mlk72WGm5CC21oNlWy/va0E86zZkzJ+nzoRXKNWu2ZkFv3769ex5LE9C0qOkZZ5zhHs/TTz/dza4bT0snaF+0hMqJJ57oZq+NXyBSM93279/fjj32WLeUTL9+/XZYZwnIBVYFB1LQtGlTGzJkSMH/t27dagsXLnQHAE21rynotc5QENx33332l7/8peD/5557rp100knmFwold999twuPmuo+2UrF27dvtxtuuMFNl68D/oUXXugW9/MW+tQikApJWhpCC9b+61//sv3339/9rp4zLR1QmtWvixP7mkgHrd2j8JCI9uuKK65w4eSaa65xa55peQwth3H55ZcXG/60KvSf/vQn9zzrcRkwYIBba0iBR7R8gpaRUDgcPXq0m15fS2lo2QFNue+toXTZZZe552fo0KHu//fee68LlgqNsQvmAlmX6ymSgaBJNP26Z8yYMW7K8o8//jjr25Vo2Y/SiF8yw2++++47t43PP/98sbcbN26cu92MGTN2uO7DDz+MHHrooW45iETee+8997s69QMtXTFq1KhIkyZN3NIl8csciJYy6datW5HLRowYETnqqKMiGzduTHrfHTt2jFxzzTVFLtP/tVyEZ/DgwW45gc2bNxdc9tRTT0UaN24c+f77793/X3rpJbddX3zxRcFtdF6P87Rp01LccyA9aJYC0kjNU7JixYqCy7SAYNeuXV15X00rWjQ1tulKzUBqUnjttdesU6dOronhvPPOK7Lirr4Jq2lCzSmx9Hv61p3MvHnz3DdprVCsbdPt9fdU5RCvuUMLQ3rnEzVLlWYftCjf66+/bp07d3Z/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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 4
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-20T02:35:48.631904Z",
     "start_time": "2025-06-20T02:35:48.612916Z"
    }
   },
   "source": [
    "# 计算损失函数，theta的初始值为大小为2的数组，对应自变量和截距项\n",
    "def computeCost(X, Y, theta=[[0], [0]]):\n",
    "    m = Y.size\n",
    "    J = 0\n",
    "    # h为线性拟合的函数，本质为一条连续直线\n",
    "    h = X.dot(theta)\n",
    "    # 最小二乘法，J即为损失函数\n",
    "    J = 1.0/(2*m)*(np.sum(np.square(h-Y)))\n",
    "    \n",
    "    return J"
   ],
   "outputs": [],
   "execution_count": 6
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-20T02:35:53.974016Z",
     "start_time": "2025-06-20T02:35:53.954777Z"
    }
   },
   "source": [
    "# 初始损失函数值很大，后续使用梯度下降算法获取损失函数的最优解\n",
    "computeCost(X, Y)"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.float64(32.072733877455676)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 9
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-20T02:35:55.711353Z",
     "start_time": "2025-06-20T02:35:55.701537Z"
    }
   },
   "source": [
    "# 梯度下降算法，alpha为步长（超参数），num_iters为迭代轮次\n",
    "def gradientDescent(X, Y, theta=[[0], [0]], alpha=0.01, num_iters=1500):\n",
    "    m = Y.size\n",
    "    J_history = np.zeros(num_iters)\n",
    "    \n",
    "    for iter in np.arange(num_iters):\n",
    "        h = X.dot(theta)\n",
    "        #X.T表示x的转置矩阵，X.T.dot(h-Y)没有进行求和是因为它本身是线性代数运算，其值为所有乘积的和\n",
    "        theta = theta - alpha*(1.0/m)*(X.T.dot(h-Y))\n",
    "        J_history[iter] = computeCost(X, Y, theta)\n",
    "    return (theta, J_history)"
   ],
   "outputs": [],
   "execution_count": 10
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-20T02:35:57.354232Z",
     "start_time": "2025-06-20T02:35:57.232688Z"
    }
   },
   "source": [
    "# 画出每一次迭代和损失函数变化\n",
    "theta, cost_J = gradientDescent(X, Y)\n",
    "# ravel指散开的意思，返回一个视图view。flatten也是打平的意思，但是其返回一份拷贝（降维）\n",
    "print('回归模型训练参数=>', theta.ravel())\n",
    "\n",
    "# 损失函数迭代曲线\n",
    "plt.plot(cost_J, c=\"r\")\n",
    "plt.xlabel('iterations')\n",
    "plt.ylabel('cost_J')"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "回归模型训练参数=> [-3.63029144  1.16636235]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'cost_J')"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "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C0c33HBDimPatGmpPv+TTz5J9fnBGWIxI39+t6pjBgyQjh/3ukUAAEScC+r3+PLLL/W3v/1NV111VZLz9vWTTz6p1157LcN7bVmFaN68ec6g5yDbQT0169evV7Vq1ZyQlVhw+ntMsWnow4ZJ27dLI0dKzz3ndYsAAIj+sGN7Y9kYndRY4Dhy5EiGXm/Dhg269tprnfV70vt8q+QUsnErsc62j3jxRal1a2nQIKlDB+k87w0AALHogrqxLGgENwFNbsaMGSpVqlSGXs8qNddff33Inu97LVtKZctKtuv84MFetwYAgOiv7Ng6OragoO1uXr9+fafCsnfvXmfPLOviGjFiRIZezyo1Vimyvba2bt2qa665xtlrK7gFRWL2Z9oYnxUrVmjKlCnav3+/ypcvr2effVbX2VTsWJQtm/TKK9J999kurVLXrtIVV3jdKgAAoreyU7NmTb366qv64Ycf1Lt3byf42K2NvbGVle+66650v9bp06e1ZcsWJ8R07dpV48aNU8WKFdWxY0ctXrw4xfNt01FjywPZnzVs2DDFx8c7Cxv+9ttvilkNG9obI504IfXv73VrAACIGBe8MIttBmpTznv16uUEFQs6tlVERsfr2KyupUuXKlu2bM5MLlO2bFkn1IwfP141atRI8nxby8dCkFWCgoOZR40apTp16jiztywkxST7u3j9denWW6UJE9zqzv82awUAIJZdUGXHFhO0iooNKraxM5UrV1bdunXVoEEDp+LzwQcfZOj18ubNmxB0gkqWLHne9XpsEHTiWVu5c+fWlVdeyfo+FgwfftjdPsIWHIztxbEBALjwsPP+++87+2PZ9POgYsWKqV+/furSpYsmZWCBO6vgWFiy6k5i3333nUqUKJHi+VOnTlX16tV17NixhHNWTdq2bVuqz485r77qztBasED6v//zujUAAHjugsKOVVDKlSuX6mMVKlTI0OJ+VhkqXry4XnzxRWfQ8ebNm52xOKtXr3YGKds0dxv8fMLGokjOoOWzZ8/queeec4KSbT5qY32s2tO0adMLuRx/ufZa6emnz62wfPKk1y0CACD6ws4VV1yR6uBhs3z5chUtWjT9DciaVW+99ZYzo8qqRbYNxZo1a5ytJ2wK+86dO1WrVi1nteZgBckqR1bZad68ubMXly0+OHnyZGdhQkjq00eyNYs2bJDGjPG6NQAA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5puBG2+8MfDNN984fwfW9o4dOwbWr18f+OyzzwLVqlULDB8+POH7p02b5vz/MGPGjMDGjRsDzz77rPOc33//PRCJRowYEahZs2bgv//9b2Dbtm2Bvn37BqpUqRLYvXu3r95fez/tfXz00UcTzmXG9aXnNSLpmu1zp3Tp0oExY8YEtm7dGvj8888DtWvXdj6X0vsZlZ7PuUi53sTs59U+v+rWrZvkfDS/xxeKsJPJ7H+WSpUqBd57772EcwcPHnR+GcycOTMQbeyXgf2wrFixIuHc2bNnnQ+GYcOGBZ5//vnAgw8+mOR7evTo4fzwmF27djk/jPYBE2SByV7TfplGsn/84x+BVq1aJQk7b731VqBWrVqBU6dOJXmefVBE4/tv76V9EL766qtJztv7Z9dqbS5btmzgwIEDCY+9//77gcqVKyd8MNq1v/baawmP29/N7bff7nx/JLrvvvsCgwYNSvj68OHDzns8d+5cX7y/9jP3+OOPBypWrBi45557kvwizIzrS+s1Iu2ae/bsGXjssceSPP/jjz8OlClTxrne9HxGpfU5F0nXG2Th/ZZbbnEeq5so7ETre/xn0Y2VydatW6ejR4865dCg/Pnz66abbtLy5csVbQoUKKBx48Y53RtBWbJkcY5Dhw453VmJr9XccsstWrlypQVp5zZ4Lui6665TkSJFIvrvw9o2depUvfrqq0nO2/VWq1ZN2bNnTzhn17Zt2zb99ttvUff+WzfdL7/8okaNGiU5P378eKfryq63TJkyuvjii5Nc75EjR5wy9++//+5ce+Lrtb+bqlWrRuT1moIFC2rhwoVO95x1x9n7nDNnTt14442+eH+///575ciRQ5988onT5ZJYZlxfWq8Radfctm1b9erVK8m5rFmz6tSpU87/x+n5jErrcy6SrtdYm3r37q3777/fea8Si9b3+M8i7GSyXbt2ObfFihVLcr5w4cIJj0UT+yG4/fbbnV8GQXPnztX27dud/l67pqJFi6a41uPHj2v//v3avXu3E5hy5coVNX8fFuKee+45p687+ft4vus1O3fujLr338KOOXbsmNq1a+d8ADZr1swZ4+DH6zV9+/Z1flHYGCML8UOHDnXGL1x99dW+uF4bXzFy5EhdddVVKR7LjOtL6zUi7Zrtl7gF2SALOZMmTVLZsmV16aWXpuszKq3PuUi6XmPXt3fv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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 11
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-20T02:36:00.651235Z",
     "start_time": "2025-06-20T02:36:00.502150Z"
    }
   },
   "source": [
    "# 绘制数据分布散点图\n",
    "plt.scatter(X[:,1], Y, c='b', s=30)\n",
    "# 城市人口数量，单位：万\n",
    "plt.xlabel('Population of City in 10,000s')\n",
    "# 收入，单位：万美元\n",
    "plt.ylabel('Profit in $10,000s')\n",
    "\n",
    "# 自定义线性拟合的模型\n",
    "x = np.arange(5,23)\n",
    "y = theta[0] + theta[1]*x\n",
    "plt.plot(x, y, label='Linear regression (Gradient descent)')\n",
    "\n",
    "# 引入sklearn中的线性回归\n",
    "line_regr = LinearRegression()\n",
    "#ravel函数在降维时默认是行序优先，即将列向量转为行向量\n",
    "line_regr.fit(X[:, 1].reshape(-1, 1), Y.ravel())\n",
    "plt.plot(x, line_regr.intercept_ + line_regr.coef_ * x, label='Liner regression(Scikit_learn)')\n",
    "\n",
    "plt.xlim(4,24)\n",
    "plt.xlabel('Population of City in 10,000s')\n",
    "plt.ylabel('Profit in $10,000s')\n",
    "# 指定图例位置\n",
    "plt.legend(loc=4); "
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 12
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-20T02:36:06.213574Z",
     "start_time": "2025-06-20T02:36:06.206873Z"
    }
   },
   "source": [
    "#预测一下人口为35,000和70,000的城市的结果\n",
    "print(\"3.5万城市人口的收入==\", theta.T.dot([1,3.5])*10000)\n",
    "print(\"7万城市人口的收入==\", theta.T.dot([1,7])*10000)"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3.5万城市人口的收入== [4519.7678677]\n",
      "7万城市人口的收入== [45342.45012945]\n"
     ]
    }
   ],
   "execution_count": 15
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
